package com.coderman.infosys.auth.domain.support.bo;

import java.util.List;
import java.util.Optional;

import com.coderman.infosys.auth.domain.bo.role.RoleBO;
import com.coderman.infosys.auth.domain.bo.role.RoleGroupBO;

import lombok.Data;
import lombok.ToString;

/**
 * @version v1.0
 * @Description:用户信息类---> 这里的用户其实算是支撑领域或者账号领域里的对象，这里可以认为是support.user.UserBO
 * 在权限平台里并不需要存储用户的完整信息，
 * 但是权限平台内部仍然有需求需要从用户的角度来看用户有哪些权限，哪些角色，属于哪些角色组，哪些用户组等
 * 所以基于此从User的业务角度来看User或者UserAuthority也可以看作是一个聚合根
 * @Author:shenshuai
 * @CreateTime:2022-01-02 15:27:38
 */
@Data
@ToString
public class UserBO {

    public UserBO(){}

    public UserBO(Long userId){
        this.userId = userId;
    }
    /**
     * 用户名
     **/
    private String userName;

    /**
     * 用户ID
     **/
    private Long userId;

    /**
     * 用户对应角色列表
     **/
    private List<RoleBO> roleList;

    /**
     * 用户对应角色组列表
     **/
    private List<RoleGroupBO> roleGroup;

    /**
     * 通过实体标示构建
     * @param userId
     * @return
     */
    public static UserBO ofIdentifer(Long userId){
        return new UserBO(userId);
    }

    /**
     * @return boolean
     * @Description:判断用户是否存在指定角色
     */
    public boolean containsRole(String roleCode) {
        if (this.roleList == null || this.roleList.isEmpty()) {
            return false;
        }
        Optional<RoleBO> roleBOOptional = this.roleList.stream().filter(roleBO -> roleBO.getRoleCode().equals(roleCode)).findFirst();
        if (roleBOOptional.isPresent()) {
            return true;
        }
        return false;
    }

}